package drds.configuration.ddlparser.sql;

import drds.configuration.ddlparser.ddl.table.DataType;
import drds.configuration.ddlparser.ddl.update.UpdateColumn;

/**
 * Created by ibm on 2017/12/24.
 */
public class CreateUpdateColumn {
    public static String sql(UpdateColumn column) {

        StringBuilder sb = new StringBuilder("");
        sb.append("alter table").append(DataType.space).append(column.getTableName()).append(DataType.space).append("modify column").append(DataType.space).append(column.getColumnName()).append(DataType.space);


        DataType dataType = column.getDataType();
        if (column.getDataType() == DataType.TINYINT || dataType == DataType.SMALLINT || dataType == DataType.MEDIUMINT || dataType == DataType.INT || dataType == DataType.BIGINT) {
            if (column.isUnsigned()) {
                sb.append("unsigned");
                sb.append(DataType.space);
            }

            if (column.getDataType() == DataType.TINYINT) {
                sb.append("tinyint");
            } else if (column.getDataType() == DataType.SMALLINT) {
                sb.append("smallint");
            } else if (column.getDataType() == DataType.MEDIUMINT) {
                sb.append("smallint");
            } else if (column.getDataType() == DataType.INT) {
                sb.append("int");
            } else if (column.getDataType() == DataType.BIGINT) {
                sb.append("bigint");
            } else {
                throw new RuntimeException("else");
            }
            sb.append("(").append(column.getLength()).append(")").append(DataType.space);
            sb.append("default ");
            sb.append(column.getDefaultValue()).append(";").append(DataType.newLine);

        } else if (dataType == DataType.DATE_TIME_LONG) {
            sb.append("bigint(14) default 0;").append(DataType.newLine);
        } else if (dataType == DataType.DECIMAL) {
            if (column.isUnsigned()) {
                sb.append("unsigned");
                sb.append(DataType.space);
            }
            sb.append("decimal");
            sb.append("(").append(column.getInteger() + column.getPrecision()).append(",").append(column.getPrecision()).append(")").append(" ");
            sb.append("default ");
            sb.append(column.getDefaultValue()).append(";").append(DataType.newLine);
        } else if (dataType == DataType.VARCHAR || dataType == DataType.CHAR) {
            if (dataType == DataType.VARCHAR) {
                sb.append("varchar");
            } else {
                sb.append("char");
            }
            sb.append("(").append(column.getLength()).append(")").append(DataType.space);
            sb.append("default ");
            sb.append("'").append(column.getDefaultValue()).append("'").append(";").append(DataType.newLine);
        } else {
            throw new RuntimeException("else");
        }
        return sb.toString();
    }
}
